#ifndef NETWORK_H
#define NETWORK_H

#include "../include/threadpool.h"
#include "../include/cache.h"
#include <netinet/in.h>
#include <sys/epoll.h>
#include <stddef.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 服务器配置
// 最大事件数 epoll最大事件数
#define MAX_EVENTS 1024
// 监听backlog 监听队列大小
#define LISTEN_BACKLOG 128
// 读缓冲区大小 读取客户端数据缓冲区大小
#define READ_BUFFER_SIZE 1024

// 服务器主结构体
typedef struct NetworkServer {
    int listen_fd;          // 监听socket
    int epoll_fd;           // epoll fd
    int port;               // 监听端口
    ThreadPool* threadpool; // 线程池指针
    Cache* cache;           // 缓存指针
} NetworkServer;

// 启动服务器，初始化socket、epoll等
int network_server_start(NetworkServer* server, int port, void* threadpool, void* cache);

// 服务器主循环（epoll事件循环）
void network_server_run(NetworkServer* server);

// 关闭服务器，释放资源
void network_server_stop(NetworkServer* server);

// 处理新连接
void handle_accept(NetworkServer* server);

// 处理客户端数据（读、解析、投递任务）
void handle_client_data(NetworkServer* server, int client_fd);

// 关闭客户端连接
void close_client(NetworkServer* server, int client_fd);

#endif
